Hibernate-এ Transactional Methods ব্যবহারের মাধ্যমে আপনি ডাটাবেসের ট্রানজেকশন পরিচালনা করতে পারেন। Hibernate ট্রানজেকশন ম্যানেজমেন্ট সরাসরি Session এবং Transaction অবজেক্টের মাধ্যমে পরিচালিত হয়। এই প্রক্রিয়া কার্যকরভাবে commit এবং rollback পরিচালনা করে, যা ডাটাবেস অপারেশনগুলোর অ্যাটমিকতা, স্থিতিশীলতা এবং সম্পূর্ণতা নিশ্চিত করে।
Transaction in Hibernate
Hibernate-এ ট্রানজেকশন হলো এক বা একাধিক ডাটাবেস অপারেশনের গ্রুপ, যা একযোগে সফলভাবে সম্পন্ন বা ব্যর্থ হতে পারে। এটি ACID (Atomicity, Consistency, Isolation, Durability) বৈশিষ্ট্য নিশ্চিত করে। Hibernate ট্রানজেকশন ম্যানেজমেন্টের জন্য Transaction API প্রদান করে, যা একাধিক অপারেশনকে একত্রে কার্যকরী করতে সহায়ক।
Commit/Rollback Concept:
- Commit: যখন ট্রানজেকশন সফলভাবে সম্পন্ন হয় এবং সমস্ত পরিবর্তন ডাটাবেসে সেভ হয়ে যায়।
- Rollback: যখন ট্রানজেকশন চলাকালীন কোনো ত্রুটি ঘটে, তখন সমস্ত পরিবর্তন বাতিল করে ডাটাবেস পূর্বাবস্থায় ফিরে আসে।
Step 1: Hibernate Configuration (hibernate.cfg.xml)
প্রথমে Hibernate কনফিগারেশন ফাইলটি তৈরি করতে হবে যেখানে ডাটাবেসের সংযোগের তথ্য থাকবে।
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- JDBC Database connection settings -->
<property name="hibernate.dialect">org.hibernate.dialect.H2Dialect</property>
<property name="hibernate.connection.driver_class">org.h2.Driver</property>
<property name="hibernate.connection.url">jdbc:h2:mem:test;DB_CLOSE_DELAY=-1</property>
<property name="hibernate.connection.username">sa</property>
<property name="hibernate.connection.password"></property>
<!-- Enable Hibernate's automatic session context management -->
<property name="hibernate.current_session_context_class">thread</property>
<!-- Show SQL -->
<property name="hibernate.show_sql">true</property>
<!-- Drop and re-create the database schema on startup -->
<property name="hibernate.hbm2ddl.auto">update</property>
<!-- Mention annotated class -->
<mapping class="com.example.hibernate.Employee"/>
</session-factory>
</hibernate-configuration>
এখানে, hibernate.cfg.xml ফাইলে ডাটাবেস সংযোগ এবং Hibernate কনফিগারেশন দেওয়া হয়েছে। Employee ক্লাসের জন্য একটি টেবিল তৈরি করা হবে।
Step 2: Entity Class তৈরি করা (Employee)
এখানে একটি Employee ক্লাস তৈরি করব যা Hibernate Entity হবে এবং ডাটাবেস টেবিলের সাথে সম্পর্কিত হবে।
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
@Entity
public class Employee {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String name;
// Constructors, Getters and Setters
public Employee() {}
public Employee(String name) {
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
এখানে, @Entity অ্যানোটেশন দ্বারা Employee ক্লাসটি Hibernate Entity হিসেবে চিহ্নিত করা হয়েছে এবং @Id এবং @GeneratedValue অ্যানোটেশন ব্যবহার করে প্রাইমারি কী ফিল্ড তৈরি করা হয়েছে।
Step 3: Transactional Methods with Commit/Rollback
Hibernate-এ ট্রানজেকশন ব্যবস্থাপনা করার জন্য, আপনি Session অবজেক্টের beginTransaction() মেথড দিয়ে একটি ট্রানজেকশন শুরু করবেন, এবং commit() অথবা rollback() মেথড দিয়ে ট্রানজেকশন পরিচালনা করবেন।
Transactional Method Example:
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
public class EmployeeDAO {
private SessionFactory sessionFactory;
public EmployeeDAO(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
public void saveEmployee(Employee employee) {
// Start a session
Session session = sessionFactory.getCurrentSession();
// Begin transaction
Transaction transaction = session.beginTransaction();
try {
// Save the employee object
session.save(employee);
// Commit the transaction
transaction.commit();
System.out.println("Employee saved successfully");
} catch (Exception e) {
// If error occurs, rollback the transaction
if (transaction != null) {
transaction.rollback();
}
e.printStackTrace();
}
}
}
এখানে:
session.save(employee): এটিEmployeeঅবজেক্টকে ডাটাবেসে সেভ করবে।transaction.commit(): এটি সফলভাবে ডাটাবেসের পরিবর্তন সেভ করবে।transaction.rollback(): যদি কোনো ত্রুটি ঘটে, তবে পরিবর্তনগুলো রিভার্ট করবে এবং ডাটাবেসের পূর্বাবস্থা ফিরে আসবে।
Step 4: Main Application to Test Transaction
এখন, আমরা MainApp ক্লাসে Hibernate দিয়ে ডেটা সেভ করার এবং ট্রানজেকশন পরিচালনা করার উদাহরণ দেখাবো।
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class MainApp {
public static void main(String[] args) {
// Create session factory
SessionFactory sessionFactory = new Configuration().configure("hibernate.cfg.xml")
.addAnnotatedClass(Employee.class)
.buildSessionFactory();
// Create EmployeeDAO instance
EmployeeDAO employeeDAO = new EmployeeDAO(sessionFactory);
// Create Employee object
Employee newEmployee = new Employee("John Doe");
// Save the employee (Transaction will be handled inside DAO method)
employeeDAO.saveEmployee(newEmployee);
// Close the session factory
sessionFactory.close();
}
}
এখানে:
EmployeeDAO.saveEmployee(newEmployee)মেথডে ট্রানজেকশন পরিচালনা করা হবে, যেখানে ডেটা সেভ করা হবে এবং ট্রানজেকশন সফলভাবে কমিট হবে বা কোনো ত্রুটির ক্ষেত্রে রোলব্যাক হবে।
Step 5: Output
যদি আপনার Hibernate কনফিগারেশন সঠিকভাবে সেটআপ থাকে এবং ডাটাবেসে কোনো ত্রুটি না ঘটে, তাহলে আউটপুট হবে:
Hibernate: insert into Employee (name) values (?)
Employee saved successfully
এখানে, Hibernate: insert into Employee (name) values (?) SQL স্টেটমেন্টটি Hibernate কনসোল আউটপুট হিসেবে দেখাবে, এবং Employee saved successfully একটি কনসোল মেসেজ থাকবে, যা নির্দেশ করে যে ট্রানজেকশন সফলভাবে সম্পন্ন হয়েছে।
Step 6: Transaction Management Best Practices
- Transaction Boundary:
- ট্রানজেকশন শুরু করা এবং শেষ করার মধ্যে সমস্ত ডাটাবেস অপারেশনগুলি একটি ইউনিট হিসেবে পরিচালিত হবে।
- Exception Handling:
- Rollback ব্যবহার করে ডাটাবেসের অবস্থাকে নিরাপদে ফিরিয়ে আনা যায়, যদি কোনো ত্রুটি ঘটে। তাই, ট্রানজেকশন ব্যবস্থাপনার সময় সঠিক এক্সেপশন হ্যান্ডলিং খুব গুরুত্বপূর্ণ।
- Session Management:
- ট্রানজেকশন ব্যবস্থাপনার জন্য Session অবজেক্ট ব্যবহার করা হয়, তবে এই অবজেক্টটি অবশ্যই ট্রানজেকশন শেষে বন্ধ করা উচিত।
- Atomicity:
- নিশ্চিত করতে হবে যে সমস্ত অপারেশন একত্রে সফলভাবে সম্পন্ন হবে অথবা কোনো সমস্যা হলে সবকিছু বাতিল হবে। Hibernate এটি
commit()এবংrollback()মেথডের মাধ্যমে নিশ্চিত করে।
- নিশ্চিত করতে হবে যে সমস্ত অপারেশন একত্রে সফলভাবে সম্পন্ন হবে অথবা কোনো সমস্যা হলে সবকিছু বাতিল হবে। Hibernate এটি
Hibernate-এ Transactional Methods ব্যবহারের মাধ্যমে আপনি ডাটাবেসের একাধিক অপারেশনকে একটি ট্রানজেকশনে সম্পন্ন করতে পারেন, যা commit এবং rollback এর মাধ্যমে কার্যকরভাবে পরিচালিত হয়। এটি Atomicity এবং Consistency নিশ্চিত করে, এবং Hibernate ট্রানজেকশন ব্যবস্থাপনা সহজ করে তোলে। Hibernate-এর Session এবং Transaction ব্যবহার করে আপনি ডাটাবেস অপারেশনগুলো অ্যাটমিকভাবে এবং নিরাপদে সম্পন্ন করতে পারবেন।
Read more